/**
 * @see 该页面是缴费通用界面，此界面从不同的业务进入，需要带入参数进入。进入时根据业务类型来做不同的处理。
 * @see 接受参数主要有：
 * @param {*orderDetails 订单详情} Object
 * @param {*type 业务类型（电子证明文件、电子成绩单、...）} String
 * @example /pages/workService/components/sendEmail/index?orderDetails=*********&type=电子证明
 */
import { API_CONFIG } from "../../../../config.js"
import {formatMoneyArr, getPageAdPicList, handleAdPicClick, requestSubscribeMessage} from "../../../../utils/util" // 格式化金额

let tmplIds = []
let showTemplate = false
Page({
	data: {
		bIsShowModal: false, // 是否显示支付密码弹窗
		password: "", // 用户支付密码
		email: "", // 邮箱
		orderDetails: {}, // 订单信息
		type: "", // 是电子成绩单还是电子证明
		isRightEamil: false, // 邮箱是否正确
		payWay: "wx", // 支付方式 wx umi
		buttonList: [
			{ text: "确认扣除" },
			// { text: '取 消' }
		],
		userInfo: "", // 用户信息
		showAdvert: true,
		tips: "",
		openPageList: [],
		projectList: [],
		config: API_CONFIG,
		isOldSchoolList: [
			"4161010697", // 西北大学
			// '4000011111', // 正脉微校
		], // 用旧版的学校列表
		isNew: false, // 是否是新版页面
		schoolCode: "",
		// 广告图片
		adImageItem: {
			imgAddress: "",
			placementLocation: "",
			jumpType: "",
			jumpAddress: "",
			appid: "",
		},
	},
	onLoad(option) {
		// 获取广告图片
		getPageAdPicList("workService:sendEmail").then((list) => {
			if (list && list.length > 0) {
				this.setData({
					adImageItem: list[0],
				})
			}
		})
		
		const { schoolCode } = wx.getStorageSync("schoolConfig")
		this.setData({
			schoolCode: schoolCode.toString(),
		})
		// this.setData({
		// 	isNew: !this.data.isOldSchoolList.includes(schoolCode + ""),
		// })
		showTemplate = false
		option.type = decodeURIComponent(option.type)
		this.initData(option)
		this.refreshOpenPageList()
		this.refreshProjectList()
		const type = option.type
		if (type === "电子成绩单") {
			this.setData({
				type: 1,
			})
		} else if (type === "电子证明") {
			this.setData({
				type: 2,
			})
		}
		this.getTips()
	},
	/**
	 * @see 初始化数据
	 */
	initData(option) {
		try {
			const orderDetails = JSON.parse(decodeURIComponent(option.orderDetails))
			console.log(orderDetails, "orderDetails")
			const type = option.type
			orderDetails.wxCountPriceArr = formatMoneyArr(
				orderDetails.wxCountPrice,
			).join("")
			orderDetails.data.forEach((item) => {
				item.wxPriceArr = formatMoneyArr(item.wxPrice)
			})
			this.setData({
				orderDetails,
				type,
				userInfo: wx.getStorageSync("userInfo"),
			})
		} catch (err) {
			console.log(err)
			wx.showToast({
				title: "解析数据错误",
				icon: "none",
			})
		}
	},
	// 点击出国留学项目
	openLook(e) {
		const { index } = e.currentTarget.dataset
		const item = this.data.projectList[index]
		wx.navigateTo({
			url: `/pages/web/web?path=${encodeURIComponent(item.path)}`,
		})
	},
	// 获取出国留学项目列表
	refreshProjectList() {
		wx.request({
			url: "https://xwx.gzzmedu.com:10086/enrollmentClient/getProjectPage",
			method: "POST",
			dataType: "json",
			data: {}, // 必须有,不然数据异常
			success: (res) => {
				console.log(res, "获取响应的内容")
				if (res.data.errcode === "0") {
					res.data.result.data.forEach((item) => {
						item.path = `https://xwx.gzzmedu.com/study_abroad/home/Details?id=${item.projectId}&expanderCode=1674349987086995457`
					})
					this.setData({
						projectList: res.data.result.data,
					})
				} else {
					wx.showToast({
						title: res.data.errmsg,
						icon: "none",
					})
				}
			},
			fail(error) {
				console.log(error, "获取出国留学项目列表失败")
			},
		})
	},
	// 点击某个开放页面
	onOpenNoLoginPage(e) {
		let config = e.currentTarget.dataset.query
		if (!config.requestUrl) {
			wx.showToast({
				title: "该项未配置跳转地址,请联系相关管理员配置",
				icon: "none",
			})
			return
		}
		if (config.appid) {
			wx.navigateToMiniProgram({
				appId: config.appid,
				path: config.requestUrl,
				envVersion: config.envVersion,
				extraData: {
					from: "xwx",
				},
			})
		} else if (/^http(s)?/.test(config.requestUrl)) {
			wx.navigateTo({
				url: `/pages/web/web?path=${encodeURIComponent(config.requestUrl)}`,
			})
		} else {
			wx.navigateTo({
				url: config.requestUrl,
			})
		}
	},
	// 获取开放页面
	refreshOpenPageList() {
		wx.$API["login/getOpenPageList"]()
			.then((res) => {
				this.setData({
					openPageList: res.data,
				})
				console.log(res, "开放页面列表")
			})
			.catch((error) => {
				this.setData({ openPageLoading: false })
				console.log(error, "error")
				wx.showToast({
					title: error,
					icon: "none",
					duration: 3000,
				})
			})
	},
	viewAll() {
		wx.navigateTo({
			url: "/pages/web/web?path=https://xwx.gzzmedu.com/study_abroad/home&expanderCode=1674349987086995457",
		})
	},
	/**
	 * @see 获取提示语
	 */
	getTips() {
		const currentMenu = wx.getStorageSync("currentMenu") || {}
		wx.$API["workService/getMenuHint"]({
			menuId: currentMenu.menuId,
		})
			.then((res) => {
				this.setData({
					tips: res.data[0].content,
				})
				console.log("获取提示语", res)
			})
			.catch((error) => {
				wx.showToast({
					title: error,
					icon: "none",
				})
			})
	},
	/**
	 * @see 关闭头部广告
	 */
	closeAdvert() {
		this.setData({
			showAdvert: false,
		})
	},
	/**
	 * @see 选择支付方式（微信支付或者U米支付）
	 */
	selectPayWay(e) {
		const { payWay } = e.currentTarget.dataset
		this.setData({ payWay })
	},
	/**
	 * @see 邮箱value改变触发事件
	 */
	changeInputEmail(e) {
		const { value } = e.detail
		const reg = new RegExp(
			/^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/,
		)
		if (reg.test(value)) {
			this.setData({
				isRightEamil: true,
				email: value,
			})
		} else {
			this.setData({
				isRightEamil: false,
			})
		}
	},
	changePassword(e) {
		this.setData({
			password: e.detail.detail.value,
		})
	},
	/**
	 * @see 支付密码弹窗确认按钮事件
	 */
	handleCloseModal() {
		const { password } = this.data
		if (password.length !== 6) {
			wx.showToast({
				title: "请填全支付密码",
				icon: "none",
			})
			return
		}
		this.setData({
			bIsShowModal: false,
		})
		this.getUmiPay()
	},
	/**
	 * @see 点击“确认扣除”按钮显示支付密码弹窗
	 */
	submit() {
		const { isRightEamil, payWay } = this.data
		const { schoolCode } = wx.getStorageSync("schoolConfig")
		new Promise((resolve, reject) => {
			if (showTemplate) {
				resolve()
				return
			}
			wx.$API["home/getTemplateIds"]({ schoolCode })
				.then((res) => {
					console.log(res, "获取订阅消息模板")
					tmplIds = res.data
					showTemplate = true
					wx.requestSubscribeMessage({
						tmplIds: tmplIds.slice(0, 3),
						success: (res) => {
							requestSubscribeMessage()
							console.log(res, "调用成功")
						},
						fail: (err) => {
							console.log(err, "调用模板消息通知失败")
						},
						complete() {
							resolve()
						},
					})
				})
				.catch(() => {
					resolve()
				})
		}).then(() => {
			const getPayTips = () => {
				wx.showLoading({
					title: "请稍等...",
					mask: true,
				})
				wx.$API["workService/getTips"]({})
					.then((result) => {
						const { tips } = result.data[0]
						const { orderDetails, type } = this.data
						let content = ""
						if (type === 1) {
							content = tips
								.replace(/{文件名}/, "成绩单")
								.replace(/{多少}/, (orderDetails.wxCountPrice / 100).toFixed(2))
						} else if (type === 2) {
							content = tips
								.replace(/{文件名}/, "证明文件")
								.replace(/{多少}/, (orderDetails.wxCountPrice / 100).toFixed(2))
						}
						wx.hideLoading()
						wx.showModal({
							title: "提示",
							content,
							cancelText: "取消下载",
							confirmText: "确认下载",
							cancelColor: "#F94E4E",
							confirmColor: "#2172ed",
							success: (res) => {
								if (res.confirm) {
									this.getDownloadDoc()
								}
							},
						})
					})
					.catch((err) => {
						this.getDownloadDoc()
						wx.hideLoading()
					})
			}
			if (isRightEamil) {
				if (payWay == "wx") {
					getPayTips()
				} else if (payWay == "umi") {
					this.setData({ bIsShowModal: true, password: "" })
				}
			} else {
				wx.showToast({
					title: "请填写正确的邮箱",
					icon: "none",
				})
			}
		})
	},
	onButton(event) {
		wx.showModal({
			title: "提示",
			content: `
			1.推荐优先使用qq邮箱; 
			2.推荐使用电脑打开邮箱查询; 
			3.若邮箱没收到，请到垃圾邮箱检查邮件是否被邮拦截; 
			4.若5分钟还没收取成功请到 校务行-成绩单、证明-申请记录中更换邮箱发送; 
			5.若以上操作不能收取，提供订单号联系客服退款。`,
			showCancel: false,
			confirmText: "确认",
			cancelColor: "#F94E4E",
			confirmColor: "#2172ed",
			success: (res) => {
				const { index } = event.detail
				switch (index) {
					case 0:
						this.submit()
						break
					case 1:
						wx.navigateBack({ delta: 1 })
						break
				}
			},
		})
	},
	/**
	 * @see 电子成绩单、电子证明、微信支付
	 */
	getDownloadDoc() {
		const { email, userInfo, orderDetails, type } = this.data
		if (!orderDetails.pdfSerialId) {
			wx.showToast({
				title: "订单异常",
				icon: "none",
			})
			setTimeout(() => {
				wx.navigateBack({ delta: 1 })
			}, 800)
			return
		}
		const request = {
			name: userInfo.name, // 发件人名称
			toEmail: email, // 收件人Email
			productNum: orderDetails.productCountNum, // 商品数量
			fileName: orderDetails.fileName, // 文件名称
			pdfSerialId: orderDetails.pdfSerialId, // PDF标识
			moduleType: type, // 模块类型（1：电子成绩单，2：电子证明）
			fileProperty: orderDetails.data[0].fileProperty, // 文件类型 (0：成绩单类型, 1：证明类型)
			fileType: orderDetails.data[0].fileType, // 文件类型（0：中文，1：英文，2：中英文，3：其他）
		}
		wx.showLoading({
			title: "订单正在生成...",
			mask: true,
		})
		wx.$API["workService/getDownloadDoc"](request)
			.then((result) => {
				if (typeof result === "string") {
					// 用免费份数支付
					this.paySuccessJump()
					return
				}
				const {
					timeStamp,
					nonceStr,
					package: packageQuery,
					signType,
					paySign,
				} = result.data[0]
				wx.hideLoading()
				wx.requestPayment({
					timeStamp, // 时间戳
					nonceStr, // 随机字符串
					package: packageQuery, // 统一下单接口返回的 prepay_id 参数值
					signType, // 签名算法
					paySign, // 签名
					// 微信支付成功函数
					success: (res) => {
						this.paySuccessJump()
					},
					// 微信支付失败函数
					fail: (res) => {
						console.log(res)
						wx.showToast({
							title: "订单已取消",
							icon: "none",
						})
					},
				})
			})
			.catch((err) => {
				wx.hideLoading()
				console.log(err, "订单生成失败")
				wx.showToast({
					title: "订单生成失败",
					icon: "none",
				})
			})
	},
	/**
	 * @see U米支付
	 */
	getUmiPay() {
		const { email, userInfo, orderDetails, password, type } = this.data
		const request = {
			name: userInfo.name, // 发件人名称
			idCard: userInfo.cardNumber,
			payPassword: password,
			toEmail: email, // 收件人Email
			productNum: orderDetails.productCountNum, // 商品数量
			fileName: orderDetails.fileName, // 文件名称
			pdfSerialId: orderDetails.pdfSerialId, // PDF标识
			moduleType: type, // 模块类型（1：电子成绩单，2：电子证明）
			fileProperty: orderDetails.data[0].fileProperty, // 文件类型 (0：成绩单类型, 1：证明类型)
			fileType: orderDetails.data[0].fileType, // 文件类型（0：中文，1：英文，2：中英文，3：其他）
		}
		wx.showLoading({
			title: "U米支付中...",
			mask: true,
		})
		wx.$API["workService/getUmiPay"](request)
			.then(() => {
				wx.hideLoading()
				this.paySuccessJump() // 支付成功
			})
			.catch((err) => {
				wx.hideLoading()
				this.payFail(err)
			})
	},
	/**
	 * @see 支付成功页面跳转（电子成绩单跟电子证明）
	 */
	paySuccessJump() {
		const { type } = this.data
		if (type === 1) {
			if (this.data.isNew) {
				wx.redirectTo({
					url: "/pages/workService/components/paySuccess/paySuccess",
				})
			} else {
				const data = JSON.stringify({
					type: "success",
					title: "支付成功",
					info: "支付成功，请稍后留意“申请记录”中的状态，进行邮箱查收",
					btnConfirm: true,
					btnOthers: [
						{
							text: "申请记录",
							url: "/pages/workService/components/fileAndReportCardRecord/index?type=电子成绩单",
						},
					],
				})
				wx.redirectTo({
					url:
						"/pages/workService/components/status/index?data=" +
						encodeURIComponent(data),
				})
			}
		} else if (type === 2) {
			if (this.data.isNew) {
				wx.redirectTo({
					url: "/pages/workService/components/paySuccess/paySuccess",
				})
			} else {
				const data = JSON.stringify({
					type: "success",
					title: "支付成功",
					info: "支付成功，请稍后留意“申请记录”中的状态，进行邮箱查收",
					btnConfirm: true,
					btnOthers: [
						{
							text: "申请记录",
							url: "/pages/workService/components/fileAndReportCardRecord/index?type=电子证明",
						},
					],
				})
				wx.redirectTo({
					url:
						"/pages/workService/components/status/index?data=" +
						encodeURIComponent(data),
				})
			}
		}
	},
	/**
	 * @see 支付失败页面跳转（电子成绩单跟电子证明）
	 */
	payFail(err) {
		if (err === "-101" || err === "-4000") {
			const data = JSON.stringify({
				type: "warn", // success warn
				title: "支付失败",
				info: "暂为开通U米账号，点击下方按钮前往领取~",
				btnConfirm: true,
				btnOthers: [{ text: "去领取U米", url: "/pages/person/point/index" }],
			})
			wx.redirectTo({
				url:
					"/pages/workService/components/status/index?data=" +
					encodeURIComponent(data),
			})
		} else if (err === "-102" || err === "-4002") {
			// U米余额不足
			wx.showModal({
				title: "提示",
				content: "U米余额不足，是否使用微信支付?",
				confirmColor: "#2172ed",
				success: (res) => {
					if (res.confirm) {
						this.getDownloadDoc()
					}
				},
			})
			// const data = JSON.stringify({
			//   type: 'warn', // success warn
			//   title: '支付失败',
			//   info: 'U米余额不足',
			//   btnConfirm: true,
			//   btnOthers: []
			// })
			// wx.redirectTo({
			//   url: '/pages/workService/components/status/index?data=' + encodeURIComponent(data)
			// })
		} else {
			const data = JSON.stringify({
				type: "warn",
				title: "支付失败",
				info: "支付失败，请稍后再试",
				btnConfirm: true,
				btnOthers: [],
			})
			wx.redirectTo({
				url:
					"/pages/workService/components/status/index?data=" +
					encodeURIComponent(data),
			})
		}
	},
	/**
	 * @see 取消输入
	 */
	handleCancel() {
		setTimeout(() => {
			this.setData({ bIsShowModal: false })
		}, 300)
	},
	onShareAppMessage() {
		return {
			path: "/pages/home/index",
		}
	},
	//点击了广告 banner
	advertClick() {
		handleAdPicClick(this.data.adImageItem)
		// wx.navigateToMiniProgram({
		// 	appId: "wxfa108ee7b0593fef",
		// 	path: "pages/index/index",
		// })
	},
})
/**
 * 电子成绩单流程：初始化加载电子成绩单类型列表（接口1 打印类型信息查询） -→
 * 选择电子成绩单类型后显示电子成绩单缩略图（接口2 成绩单pdf缩略图）-→
 * 点击按钮“发送邮箱”跳转“发送到邮箱界面”，把成绩单商品信息传递过去（接口3 成绩单商品信息）-→
 * 填写邮箱（没填写需要判断），选择支付方式：微信支付或者u米支付，点击“确认扣除”（接口4、5：微信支付、U米支付）-→
 * 成功跳转成功页面，失败跳转失败页面
 * 电子成绩单流程完成
 * encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
 */
